#include <iostream>
#include <stdexcept> // 引入标准异常库

// 基类
class Base {
public:
    virtual void display() const {  // 虚函数以支持多态
        std::cout << "Display Base class" << std::endl;
    }
    virtual ~Base() {}  // 虚析构函数以支持多态
};

// 派生类
class Derived : public Base {
public:
    void display() const override {  // 重写基类的虚函数
        std::cout << "Display Derived class" << std::endl;
    }
    void specificFunction() const {
        std::cout << "Specific function for Derived class" << std::endl;
    }
};

int main() {
    Base* b = new Derived(); // 向上转型，安全
    Derived* d;

    // 尝试向下转型
    d = dynamic_cast<Derived*>(b);
    if (d != nullptr) {
        d->display();           // 成功转换，调用派生类的方法
        d->specificFunction();  // 调用派生类特有的方法
    } else {
        std::cout << "Conversion failed." << std::endl;
    }

    delete b; // 释放资源
    return 0;
}